Authentication এবং Authorization

Web Development - এএসপি ডট (ASP.Net) -

Authentication এবং Authorization হল ASP.Net অ্যাপ্লিকেশনের নিরাপত্তার দুটি গুরুত্বপূর্ণ দিক। এই দুটি প্রক্রিয়া নির্ধারণ করে কোন ব্যবহারকারী অ্যাপ্লিকেশন অ্যাক্সেস করতে পারে এবং তাদের কী কী অনুমতি (permissions) থাকতে পারে। এই টিউটোরিয়ালে, Authentication এবং Authorization এর মধ্যে পার্থক্য এবং ASP.Net এ তাদের কিভাবে প্রয়োগ করা হয় তা আলোচনা করা হবে।


Authentication (প্রমাণীকরণ) কী?

Authentication হল একটি প্রক্রিয়া যা নিশ্চিত করে যে একটি ব্যবহারকারী আসলেই সে যে দাবি করছে তা। এটি ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া। যখন একটি ব্যবহারকারী অ্যাপ্লিকেশনে লগইন করে, তখন তার Username এবং Password বা অন্যান্য পরিচয়পত্রের মাধ্যমে তার পরিচয় যাচাই করা হয়।

Authentication এর প্রকারভেদ

  1. Cookie-based Authentication:
    • Cookie-based Authentication হল সবচেয়ে সাধারণ পদ্ধতি যেখানে লগইন সফল হলে সার্ভার একটি cookie প্রদান করে, যা ব্যবহারকারী পরবর্তী অনুরোধে পাঠায়।
    • ASP.Net Core এ UseCookiesAuthentication middleware ব্যবহার করে এটি সেটআপ করা যায়।
  2. JWT (JSON Web Token) Authentication:
    • JWT হল একটি জনপ্রিয় টোকেন-ভিত্তিক প্রমাণীকরণ পদ্ধতি যেখানে ব্যবহারকারী সাইন-ইন করার পর একটি টোকেন জেনারেট করা হয় এবং এটি পরবর্তী রিকোয়েস্টে পাঠানো হয়।
    • এটি বিশেষত API ভিত্তিক অ্যাপ্লিকেশনে ব্যবহৃত হয়।
  3. Third-party Authentication (OAuth, OpenID Connect):
    • এই পদ্ধতিতে ব্যবহারকারী গুগল, ফেসবুক বা অন্যান্য তৃতীয় পক্ষের সার্ভিসের মাধ্যমে লগইন করতে পারে।

ASP.Net Core এ Authentication সেটআপ

ASP.Net Core অ্যাপ্লিকেশনে Authentication কনফিগার করতে, আপনাকে Startup.cs ফাইলে ConfigureServices এবং Configure মেথডে কনফিগারেশন যোগ করতে হবে।

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options =>
            {
                options.LoginPath = "/Account/Login";  // লগইন পেজের পথ নির্ধারণ
            });

    services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseAuthentication();  // Authentication middleware যোগ করা
    app.UseMvc();
}

এখানে CookieAuthentication ব্যবহার করা হয়েছে, যা লগইন পরবর্তী সময় ব্যবহারকারীকে cookie প্রদান করবে।


Authorization (অধিকার নির্ধারণ) কী?

Authorization হল একটি প্রক্রিয়া যা নির্ধারণ করে যে কোনো প্রমাণীকৃত (authenticated) ব্যবহারকারী কোন রিসোর্স অ্যাক্সেস করতে পারবে বা পারবে না। অর্থাৎ, একটি ব্যবহারকারী যদি সফলভাবে লগইন করে, তবে তাকে অনুমতি দেওয়া হয় কিনা তার উপর ভিত্তি করে। এটি সাধারণত বিভিন্ন রোল বা পলিসির মাধ্যমে পরিচালিত হয়।

Authorization এর প্রকারভেদ

  1. Role-based Authorization:
    • রোল-ভিত্তিক অথোরাইজেশন ব্যবহারকারীর রোল (যেমন: Admin, User, Manager) অনুযায়ী অ্যাক্সেস কন্ট্রোল করে।
    • উদাহরণস্বরূপ, অ্যাডমিন ব্যবহারকারী শুধুমাত্র অ্যাডমিন পেজ অ্যাক্সেস করতে পারবে, আর সাধারণ ব্যবহারকারী তাদের নিজস্ব পেজ।
  2. Policy-based Authorization:
    • এই পদ্ধতিতে নির্দিষ্ট policy বা requirement সেট করা হয়, যা ব্যবহারকারীকে নির্দিষ্ট অ্যাকশন বা রিসোর্সের অ্যাক্সেস দেয়।

ASP.Net Core এ Authorization সেটআপ

ASP.Net Core অ্যাপ্লিকেশনে Authorization কনফিগার করতে Startup.cs ফাইলে ConfigureServices এবং Configure মেথডে কনফিগারেশন যোগ করতে হয়।

১. Role-based Authorization
public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options =>
    {
        options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
    });

    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options => { options.LoginPath = "/Account/Login"; });
    
    services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseAuthentication();
    app.UseMvc();
}

এখানে "AdminOnly" পলিসি তৈরি করা হয়েছে, যেখানে শুধুমাত্র Admin রোলের ব্যবহারকারী অ্যাক্সেস পাবে।

২. Controller/Action Level Authorization
[Authorize(Roles = "Admin")]
public IActionResult AdminDashboard()
{
    return View();
}

এই অ্যাট্রিবিউট ব্যবহার করে আপনি কন্ট্রোলারের কোনো নির্দিষ্ট অ্যাকশন বা সম্পূর্ণ কন্ট্রোলার রোল ভিত্তিক অথোরাইজেশন চেক করতে পারেন।

৩. Policy-based Authorization
public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options =>
    {
        options.AddPolicy("AgeRequirement", policy => policy.Requirements.Add(new MinimumAgeRequirement(18)));
    });
}

public void Configure(IApplicationBuilder app)
{
    app.UseAuthentication();
    app.UseMvc();
}

এখানে, AgeRequirement পলিসি অনুযায়ী শুধুমাত্র ১৮ বছর বা তার বেশি বয়সের ব্যবহারকারী অ্যাক্সেস পাবে।


Authentication এবং Authorization এর মধ্যে পার্থক্য

FeatureAuthenticationAuthorization
Definitionযাচাই করা, ব্যবহারকারী আসলেই কে তা নিশ্চিত করা।নির্ধারণ করা, ব্যবহারকারী কী করতে পারবে তা ঠিক করা।
Focusব্যবহারকারীর পরিচয় যাচাই করা।ব্যবহারকারীকে বিভিন্ন রিসোর্সের উপর কী কী অ্যাক্সেস দেওয়া হবে তা নির্ধারণ করা।
Mechanismইউজারের লগইন তথ্য (যেমন: ইউজারনেম, পাসওয়ার্ড)।রোল বা পলিসি দ্বারা নির্ধারণ।
Exampleইউজারের নাম এবং পাসওয়ার্ড যাচাই।ইউজার অ্যাডমিন রোলের হলে অ্যাডমিন পেজ অ্যাক্সেস দেওয়া।

সারাংশ

Authentication এবং Authorization ASP.Net অ্যাপ্লিকেশনের নিরাপত্তা ব্যবস্থার দুইটি গুরুত্বপূর্ণ অংশ। Authentication ব্যবহারকারীকে সনাক্ত করে, আর Authorization নির্ধারণ করে ব্যবহারকারীকে কী অ্যাক্সেস দেওয়া হবে। ASP.Net Core এবং ASP.Net MVC এ এই প্রক্রিয়াগুলোকে সহজে কনফিগার করা যায়, যাতে প্রতিটি ব্যবহারকারীর জন্য নিরাপদ এবং কাস্টমাইজড এক্সেস কন্ট্রোল প্রদান করা সম্ভব হয়।

Content added By

ASP.Net Identity Framework পরিচিতি

ASP.Net Identity Framework হলো একটি আধুনিক এবং শক্তিশালী সিকিউরিটি ফ্রেমওয়ার্ক, যা ASP.Net এবং ASP.Net Core অ্যাপ্লিকেশনগুলোর জন্য ইউজার অথেন্টিকেশন এবং অথোরাইজেশন পরিচালনা করতে ব্যবহৃত হয়। এটি ইউজারদের রেজিস্ট্রেশন, লগইন, পাসওয়ার্ড ম্যানেজমেন্ট, রোল এবং পারমিশন কন্ট্রোল, টোকেন বেসড অথেন্টিকেশন, এবং অন্যান্য নিরাপত্তা সম্পর্কিত কার্যাবলী সমর্থন করে।

ASP.Net Identity ফ্রেমওয়ার্ক প্রাথমিকভাবে ইউজার-ভিত্তিক অথেন্টিকেশন ও অথোরাইজেশন ব্যবস্থা তৈরি করার জন্য ডিজাইন করা হয়েছে এবং এটি একাধিক অথেন্টিকেশন মেকানিজমের মাধ্যমে ইউজারের সিকিউরিটি নিশ্চিত করে।


ASP.Net Identity এর মূল বৈশিষ্ট্যসমূহ

ASP.Net Identity ফ্রেমওয়ার্কে কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য রয়েছে, যা ডেভেলপারদের ইউজার ম্যানেজমেন্ট এবং সিকিউরিটি ফিচারগুলিকে সহজ করে তোলে। এই বৈশিষ্ট্যগুলো অন্তর্ভুক্ত:

  1. ইউজার অথেন্টিকেশন
    ASP.Net Identity ব্যবহার করে ইউজারদের রেজিস্ট্রেশন এবং লগইন ব্যবস্থা সহজে তৈরি করা যায়। এতে আপনি ইউজারদের নাম, ইমেইল, পাসওয়ার্ড ইত্যাদি যাচাই করতে পারেন।
  2. পাসওয়ার্ড ম্যানেজমেন্ট
    এটি পাসওয়ার্ডের শক্তি যাচাই, পাসওয়ার্ড রিসেট, পাসওয়ার্ড রিওয়ার্ড ফিচার, এবং পাসওয়ার্ড রিভোকেশন সমর্থন করে।
  3. রোল এবং পারমিশন
    ASP.Net Identity ইউজারদের রোল এবং পারমিশন অ্যাসাইন করার সুবিধা দেয়। এতে ইউজারকে নির্দিষ্ট রোল যেমন Admin, User, Manager ইত্যাদি দেওয়া যায় এবং রোল ভিত্তিক অ্যাক্সেস কন্ট্রোল করা যায়।
  4. টোকেন বেসড অথেন্টিকেশন
    ASP.Net Identity ফ্রেমওয়ার্ক JWT (JSON Web Tokens) বা OAuth এর মতো টোকেন বেসড অথেন্টিকেশন ব্যবস্থা সমর্থন করে। এটি মুঠোফোন, ওয়েব অ্যাপ, বা API গুলোর মধ্যে নিরাপদ এবং স্কেলেবল অথেন্টিকেশন প্রক্রিয়া নিশ্চিত করে।
  5. ইমেইল এবং ফোন নম্বর ভেরিফিকেশন
    ইউজারের ইমেইল বা ফোন নম্বর ভেরিফিকেশনের জন্য ইনবিল্ট ফিচার প্রদান করে, যা ইউজার অ্যাকাউন্টের সিকিউরিটি এবং বিশ্বাসযোগ্যতা বৃদ্ধি করে।
  6. থার্ড-পার্টি অথেন্টিকেশন
    ASP.Net Identity ফ্রেমওয়ার্কের মাধ্যমে Facebook, Google, Twitter, এবং Microsoft এর মতো তৃতীয় পক্ষের অথেন্টিকেশন সিস্টেম ইনটিগ্রেট করা যায়। এর মাধ্যমে সোশ্যাল মিডিয়া বা অন্যান্য সেবা থেকে ইউজারের অ্যাক্সেস নিয়ন্ত্রণ করা যায়।

ASP.Net Identity প্রজেক্টে ইনস্টল করা

ASP.Net Identity ফ্রেমওয়ার্ক ইনস্টল করা এবং কনফিগার করা বেশ সোজা। আপনি যদি ASP.Net Core ব্যবহার করছেন, তবে নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করতে হবে:

  1. NuGet প্যাকেজ ইনস্টল করা

    ASP.Net Identity ফ্রেমওয়ার্ক ব্যবহার করতে NuGet প্যাকেজের মাধ্যমে Microsoft.AspNetCore.Identity ইনস্টল করতে হবে।

    Package Manager Console ব্যবহার করে:

    Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore
    

    অথবা .NET CLI ব্যবহার করে:

    dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
    
  2. DbContext কনফিগারেশন

    ASP.Net Identity একটি DbContext ক্লাসের মাধ্যমে ইউজার এবং রোল ডেটা সংরক্ষণ করে। এটি সাধারণত ApplicationDbContext হিসেবে পরিচিত থাকে। এই DbContext ক্লাসটি IdentityDbContext থেকে ইনহেরিট করে।

    উদাহরণ:

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }
    }
    

    এখানে, ApplicationUser হলো একটি কাস্টম ইউজার ক্লাস যা IdentityUser থেকে ইনহেরিট করে, যেখানে ইউজারের জন্য অতিরিক্ত প্রপার্টি যোগ করা যেতে পারে।

  3. স্টার্টআপ কনফিগারেশন

    Startup.cs ফাইলে Identity সেবা কনফিগার করতে হবে:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    
        services.AddIdentity<ApplicationUser, IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();
    }
    

    এখানে, AddIdentity<ApplicationUser, IdentityRole> Identity সার্ভিস কনফিগার করে এবং AddEntityFrameworkStores<ApplicationDbContext> ডেটাবেস সংযোগ স্থাপন করে।


ASP.Net Identity ব্যবহার করে ইউজার অথেন্টিকেশন

ASP.Net Identity ফ্রেমওয়ার্কের মাধ্যমে ইউজার লগইন এবং রেজিস্ট্রেশন সিস্টেম তৈরি করতে নিম্নলিখিত প্রক্রিয়া অনুসরণ করতে হবে:

  1. ইউজার রেজিস্ট্রেশন ইউজার রেজিস্ট্রেশন প্রক্রিয়াটি সাধারণত একটি ফর্মের মাধ্যমে শুরু হয়, যেখানে ইউজার তার নাম, ইমেইল, পাসওয়ার্ড ইত্যাদি প্রদান করে। UserManager ব্যবহার করে রেজিস্ট্রেশন সম্পন্ন করা হয়।

    উদাহরণ:

    var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
    var result = await _userManager.CreateAsync(user, model.Password);
    
  2. ইউজার লগইন ইউজার লগইন প্রক্রিয়া পরিচালনার জন্য SignInManager ব্যবহার করা হয়।

    উদাহরণ:

    var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, false);
    
  3. ইমেইল ভেরিফিকেশন ASP.Net Identity ফ্রেমওয়ার্ক ইউজারের ইমেইল ভেরিফিকেশন সুবিধা প্রদান করে। ইমেইল ভেরিফিকেশন পদ্ধতিটি ব্যবহারকারীর ইমেইলে একটি ভেরিফিকেশন লিঙ্ক পাঠানোর মাধ্যমে কাজ করে।

সারাংশ

ASP.Net Identity ফ্রেমওয়ার্ক একটি শক্তিশালী অথেন্টিকেশন এবং অথোরাইজেশন সিস্টেম যা ASP.Net এবং ASP.Net Core অ্যাপ্লিকেশনে নিরাপত্তা পরিচালনা করতে সাহায্য করে। এটি ইউজারের রেজিস্ট্রেশন, লগইন, পাসওয়ার্ড রিসেট, রোল ম্যানেজমেন্ট, এবং সোশ্যাল অথেন্টিকেশন সমর্থন করে। Identity ফ্রেমওয়ার্ক ASP.Net অ্যাপ্লিকেশনগুলির জন্য একটি উন্নত সিকিউরিটি সিস্টেম নিশ্চিত করে, যা ইউজার ডেটা সুরক্ষিত রাখতে সাহায্য করে।

Content added By

Authentication এবং Authorization এর মধ্যে পার্থক্য

Authentication এবং Authorization দুটি গুরুত্বপূর্ণ সিকিউরিটি কনসেপ্ট যা অ্যাপ্লিকেশনে ইউজারের সুরক্ষা নিশ্চিত করতে ব্যবহৃত হয়। যদিও অনেক সময় এগুলোকে একসাথে ব্যবহার করা হয়, তবে এগুলির মধ্যে স্পষ্ট পার্থক্য রয়েছে।


Authentication (প্রমাণীকরণ)

Authentication হলো একটি প্রক্রিয়া যার মাধ্যমে সিস্টেম বা অ্যাপ্লিকেশন নিশ্চিত করে যে, ইউজারটি কে। এটি মূলত ইউজারের পরিচয় যাচাই করার প্রক্রিয়া। Authentication সফল হলে, অ্যাপ্লিকেশন জানবে ইউজারটি প্রকৃতপক্ষে সেই ব্যক্তি কি না।

Authentication এর পদ্ধতি:

  • Username এবং Password: সাধারণত ইউজারের পরিচয় যাচাই করার জন্য username এবং password ব্যবহার করা হয়।
  • OTP (One-Time Password): ইউজারের পরিচয় নিশ্চিত করতে এককালীন পাসওয়ার্ড পাঠানো হয়।
  • OAuth: তৃতীয় পক্ষের মাধ্যমে Authentication করা হয়, যেমন Google, Facebook বা Microsoft একাউন্টের মাধ্যমে লগইন করা।
  • JWT (JSON Web Token): একটি token ব্যবহার করে ইউজারের পরিচয় যাচাই করা হয়।

Authentication এর উদাহরণ:

ধরা যাক, একজন ইউজার username এবং password দিয়ে লগইন করছে। অ্যাপ্লিকেশনটি ইউজারের প্রমাণীকরণ করবে এবং এটি জানাবে যে, ইউজারটি আসলে যে ব্যক্তি দাবি করছে।

if (User.Identity.IsAuthenticated)
{
    // ইউজার সঠিকভাবে প্রমাণিত
    return View();
}
else
{
    // ইউজার সঠিকভাবে প্রমাণিত নয়
    return RedirectToAction("Login");
}

এখানে User.Identity.IsAuthenticated যাচাই করছে যে, ইউজারটি প্রমাণিত কি না।


Authorization (অনুমোদন)

Authorization হলো একটি প্রক্রিয়া যার মাধ্যমে অ্যাপ্লিকেশন বা সিস্টেম নির্ধারণ করে যে, প্রমাণিত ইউজারটি কী কী কাজ বা অ্যাক্সেস করতে পারবে। এটি ইউজারের এক্সেস রাইটস বা অনুমতিগুলো নিয়ন্ত্রণ করে, যেমন কোন ফিচার বা ডেটাতে তাদের অ্যাক্সেস থাকবে।

Authorization এর পদ্ধতি:

  • Role-based Authorization: ইউজারের role অনুযায়ী অ্যাক্সেস প্রদান করা হয়। যেমন, Admin, User, Guest ইত্যাদি।
  • Claims-based Authorization: ইউজারের claims অনুযায়ী তাদের অনুমতি দেয়া হয়, যেমন, age, subscription level ইত্যাদি।
  • Policy-based Authorization: একাধিক শর্তের ভিত্তিতে অনুমতি প্রদান করা হয়।

Authorization এর উদাহরণ:

ধরা যাক, একটি অ্যাপ্লিকেশনে Admin রোলের ইউজারকে বিশেষ কিছু অ্যাক্সেস দেওয়া হয়।

[Authorize(Roles = "Admin")]
public IActionResult AdminDashboard()
{
    return View();
}

এখানে, শুধুমাত্র Admin রোলের ইউজাররা AdminDashboard অ্যাক্সেস করতে পারবে।


Authentication এবং Authorization এর মধ্যে পার্থক্য

বিষয়AuthenticationAuthorization
সংজ্ঞাইউজারের পরিচয় যাচাই করাইউজারের কাজ বা অ্যাক্সেস অনুমোদন করা
কাজইউজারের identity যাচাই করে, তাকে প্রমাণিত করেইউজারের নির্দিষ্ট কাজ বা রিসোর্সে অ্যাক্সেস অনুমোদন
প্রক্রিয়াইউজারের username এবং password যাচাইইউজারের role বা claim এর ভিত্তিতে অনুমোদন
উদাহরণইউজার লগইন করতে পারে কিনা তা যাচাই করাইউজার কোন পৃষ্ঠায় অ্যাক্সেস পাবে কিনা তা নির্ধারণ করা
উদাহরণ প্রযুক্তিCookies, JWT, OAuth, Basic AuthenticationRole-based Authorization, Claims-based Authorization, Policy-based Authorization

Authentication এবং Authorization এর সম্পর্ক

  • Authentication এবং Authorization একসাথে কাজ করে সিস্টেম সিকিউরিটি নিশ্চিত করতে। প্রথমে Authentication সম্পন্ন হয়, যেখানে ইউজারটি প্রমাণিত হয়। তারপর Authorization প্রক্রিয়ায়, প্রমাণিত ইউজারটি তার রোল বা পারমিশন অনুযায়ী নির্দিষ্ট কাজগুলো করতে পারে।
  • Authentication শুধুমাত্র identity যাচাই করে, যখন Authorization নির্ধারণ করে ইউজারের নির্দিষ্ট permissions বা rights

ASP.Net এ Authentication এবং Authorization ব্যবহার

ASP.Net MVC এবং ASP.Net Core এ Authentication এবং Authorization ব্যবহারের জন্য কয়েকটি সাধারণ পদ্ধতি রয়েছে:

১. ASP.Net Core Authentication

ASP.Net Core এ Authentication এবং Authorization পরিচালনা করার জন্য ASP.Net Core Identity বা JWT Bearer Tokens ব্যবহৃত হয়।

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options => {
                options.LoginPath = "/Account/Login";
            });
    services.AddAuthorization(options => {
        options.AddPolicy("AdminPolicy", policy => policy.RequireRole("Admin"));
    });
}

২. ASP.Net MVC Authorization

ASP.Net MVC তে [Authorize] অ্যাট্রিবিউট ব্যবহার করে Authorization পরিচালনা করা হয়।

[Authorize(Roles = "Admin")]
public ActionResult AdminOnlyPage()
{
    return View();
}

সারাংশ:

  • Authentication ইউজারের পরিচয় যাচাই করার প্রক্রিয়া, যা নিশ্চিত করে যে ইউজারটি প্রকৃতপক্ষে কে।
  • Authorization ইউজারের অনুমতি যাচাই করে, যা সিদ্ধান্ত নেয় ইউজার কী করতে পারবে।
Content added By

Role-based এবং Claim-based Authorization

ASP.Net অ্যাপ্লিকেশনগুলোতে Authorization একটি গুরুত্বপূর্ণ নিরাপত্তা ব্যবস্থা, যা ব্যবহারকারীর অ্যাক্সেসের অনুমতি নির্ধারণ করে। Role-based এবং Claim-based Authorization হল দুটি প্রধান পদ্ধতি, যা ASP.Net অ্যাপ্লিকেশনগুলোতে ইউজারদের অনুমতি ব্যবস্থাপনা করতে ব্যবহৃত হয়। এখানে, এই দুটি Authorization পদ্ধতি বিস্তারিতভাবে ব্যাখ্যা করা হলো।


১. Role-based Authorization

Role-based Authorization ব্যবহার করে আপনি ব্যবহারকারীদের নির্দিষ্ট roles এর ভিত্তিতে অ্যাপ্লিকেশনের বিভিন্ন অংশে অ্যাক্সেস প্রদান করতে পারেন। একটি রোল হলো একটি গ্রুপ বা ক্যাটাগরি, যার মধ্যে এক বা একাধিক ব্যবহারকারী থাকতে পারে। একটি ব্যবহারকারী এক বা একাধিক রোলের সদস্য হতে পারে, এবং সেই অনুযায়ী অ্যাপ্লিকেশনের নির্দিষ্ট অংশে তার অ্যাক্সেস নির্ধারণ করা হয়।

Role-based Authorization এর প্রক্রিয়া:

  1. Roles ডিফাইন করা: প্রথমে আপনি একটি বা একাধিক রোল ডিফাইন করেন।
  2. Role-based Authorization: এরপর কন্ট্রোলার বা অ্যাকশন মেথডে Authorize অ্যাট্রিবিউট ব্যবহার করে নির্দিষ্ট রোলের জন্য অ্যাক্সেস অনুমোদন করা হয়।

Role-based Authorization উদাহরণ

  1. রোল ডিফাইন করা

ধরা যাক, আপনি দুটি রোল Admin এবং User ডিফাইন করতে চান। এই রোলগুলো ব্যবহারকারীকে অ্যাপ্লিকেশনের বিভিন্ন অংশে অ্যাক্সেস দেয়।

  1. Authorization Attribute ব্যবহার করা

[Authorize] অ্যাট্রিবিউট ব্যবহার করে নির্দিষ্ট রোলের ব্যবহারকারীদের অ্যাক্সেস প্রদান করা হয়।

[Authorize(Roles = "Admin")]
public IActionResult AdminDashboard()
{
    return View();
}

এখানে, কেবলমাত্র Admin রোলের ব্যবহারকারীরা AdminDashboard অ্যাকশন মেথডে অ্যাক্সেস পাবে। অন্যথায়, ব্যবহারকারীকে Unauthorized (401) অ্যাক্সেস রেসপন্স প্রদান করা হবে।


২. Claim-based Authorization

Claim-based Authorization আরও বিস্তারিত ও নমনীয় একটি পদ্ধতি, যেখানে claims ব্যবহারকারীর তথ্যের উপর ভিত্তি করে অ্যাক্সেস নির্ধারণ করা হয়। একটি claim হলো একটি বিবরণী বা একক টুকরো ডেটা (যেমন, নাম, ইমেইল, বয়স, অধিকার ইত্যাদি), যা ব্যবহারকারী সম্পর্কিত। Claim-based Authorization আপনাকে নির্দিষ্ট claim এর ভিত্তিতে অ্যাক্সেস কন্ট্রোল করতে সাহায্য করে।

Claim-based Authorization এর প্রক্রিয়া:

  1. Claim তৈরি করা: প্রথমে ব্যবহারকারীকে একটি বা একাধিক claim অ্যাসাইন করা হয়।
  2. Claim অনুযায়ী Authorization: এরপর Authorize অ্যাট্রিবিউটের মাধ্যমে ক্লেইম অনুযায়ী অ্যাক্সেস কন্ট্রোল করা হয়।

Claim-based Authorization উদাহরণ

  1. Claim তৈরি করা

ধরা যাক, আপনি একটি claim তৈরি করতে চান যেখানে ব্যবহারকারীর রোল বা অধিকার সম্পর্কে তথ্য থাকবে। উদাহরণস্বরূপ, আপনি একটি claim তৈরি করতে পারেন যা বলে "HasAdminRights"।

  1. Claim ব্যবহার করে Authorization
[Authorize(Policy = "HasAdminRights")]
public IActionResult AdminArea()
{
    return View();
}

এখানে, Policy দ্বারা আপনি নির্দিষ্ট claim ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। "HasAdminRights" নামের ক্লেইমটি ব্যবহারকারীর কাছে থাকা উচিত।


৩. Role-based এবং Claim-based Authorization এর মধ্যে পার্থক্য

বৈশিষ্ট্যRole-based AuthorizationClaim-based Authorization
কিভাবে কাজ করেব্যবহারকারীর রোলের উপর ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ।ব্যবহারকারীর claims (যেমন, ইমেইল, অ্যাকাউন্ট টিপ, অধিকার) এর উপর ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ।
লচিলতাকম নমনীয়তা, কেবল রোল ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ।অধিক নমনীয়তা, claims এর উপর ভিত্তি করে আরও বিস্তারিত নিয়ন্ত্রণ।
ব্যবহারসাধারণত বড় এবং সাধারণ অ্যাপ্লিকেশনগুলোর জন্য যেখানে রোল ভিত্তিক অধিকার প্রয়োজন।যেসব অ্যাপ্লিকেশনে ব্যবহারকারীর বিভিন্ন দিকের উপর ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ করা প্রয়োজন।
সুবিধাসহজ এবং দ্রুত প্রয়োগযোগ্য।অধিক কার্যকর এবং উন্নত কাস্টমাইজেশন সক্ষম।
নিরাপত্তাকম নিরাপত্তা, কারণ রোলের মধ্যে খুব কম ডেটা থাকে।অধিক নিরাপত্তা, কারণ claims এ অনেক বিশদ তথ্য থাকতে পারে।

৪. Policy-based Authorization

ASP.Net Core এ Policy-based Authorization ব্যবহার করে, আপনি একটি নির্দিষ্ট authorization policy ডিফাইন করতে পারেন, যা একটি বা একাধিক claims এর উপর ভিত্তি করে কাজ করবে। এটি claim-based Authorization এর উন্নত একটি রূপ।

উদাহরণ:

  1. Policy তৈরি করা

Startup.cs ফাইলে একটি নতুন পলিসি তৈরি করা যায়:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options =>
    {
        options.AddPolicy("HasAdminRights", policy =>
            policy.RequireClaim("Admin", "true"));
    });
}

এখানে, একটি পলিসি তৈরি করা হয়েছে যা নিশ্চিত করে যে ব্যবহারকারীর Admin নামক claim এর মান "true" হতে হবে।

  1. Policy ব্যবহার করা
[Authorize(Policy = "HasAdminRights")]
public IActionResult AdminDashboard()
{
    return View();
}

এখানে, পলিসি অনুসারে ব্যবহারকারীকে Admin ক্লেইম থাকতে হবে যাতে তারা AdminDashboard অ্যাক্সেস করতে পারে।


সারাংশ

  • Role-based Authorization সিম্পল এবং সহজ, যেখানে আপনি ব্যবহারকারীকে একটি নির্দিষ্ট রোলের ভিত্তিতে অ্যাক্সেস প্রদান করেন।
  • Claim-based Authorization অধিক নমনীয় এবং নির্দিষ্ট ডেটা যেমন, ব্যবহারকারীর অধিকার বা অবস্থান অনুযায়ী অ্যাক্সেস নিয়ন্ত্রণ করতে পারে।
  • Policy-based Authorization আরও উন্নত এবং এটি ক্লেইমগুলির উপর ভিত্তি করে পলিসি তৈরি করার মাধ্যমে অ্যাক্সেস নিয়ন্ত্রণের জন্য ব্যবহৃত হয়।

এটি আপনার অ্যাপ্লিকেশনের নিরাপত্তা এবং ব্যবহারকারীদের অ্যাক্সেস নিয়ন্ত্রণের জন্য অত্যন্ত গুরুত্বপূর্ণ দুটি পদ্ধতি।

Content added By

External Login (Google, Facebook, Twitter) ইন্টিগ্রেশন

External Login বা Third-party Authentication হলো একটি সিস্টেম যেখানে ইউজাররা তাদের Google, Facebook, Twitter, অথবা অন্যান্য তৃতীয় পক্ষের অ্যাকাউন্ট ব্যবহার করে লগইন করতে পারে। এটি ব্যবহারকারীদের সাইন আপ এবং লগইন প্রক্রিয়াকে আরও দ্রুত এবং সহজ করে তোলে। ASP.Net Core এ, External Login এর ইন্টিগ্রেশন খুবই সহজ এবং এটি OAuth 2.0 বা OpenID Connect প্রোটোকল ব্যবহার করে তৃতীয় পক্ষের সেবা প্রদানকারীদের সাথে সংযুক্ত হয়।

এটি মূলত Identity সিস্টেমের অংশ হিসেবে কাজ করে, এবং ASP.Net Core Identity এর মাধ্যমে খুব সহজে গুগল, ফেসবুক, টুইটার ইত্যাদি পরিষেবার মাধ্যমে লগইন ইন্টিগ্রেট করা যায়।


External Login এর জন্য কী প্রয়োজন?

  • OAuth 2.0 বা OpenID Connect প্রোটোকল সমর্থনকারী তৃতীয় পক্ষের সেবা (যেমন: Google, Facebook, Twitter)।
  • আপনার ASP.Net Core অ্যাপ্লিকেশনে Identity সিস্টেম কনফিগার করা।
  • API Key এবং Secret (যা আপনি তৃতীয় পক্ষের ডেভেলপার কনসোল থেকে পাবেন)।

ASP.Net Core তে External Login কিভাবে ইন্টিগ্রেট করবেন?

এই প্রক্রিয়াটি কয়েকটি প্রধান ধাপ অনুসরণ করে সম্পন্ন হয়।


১. Google Authentication ইন্টিগ্রেশন

Google Developer Console থেকে API Key এবং Secret তৈরি করুন

  1. Google Developer Console এ যান: https://console.developers.google.com/
  2. একটি নতুন Project তৈরি করুন।
  3. APIs & Services থেকে OAuth consent screen কনফিগার করুন।
  4. Credentials এ গিয়ে OAuth 2.0 Client IDs তৈরি করুন এবং Redirect URI হিসেবে https://localhost:5001/signin-google (আপনার অ্যাপ্লিকেশনের URL অনুযায়ী) দিন।
  5. Client ID এবং Client Secret কপি করুন।

ASP.Net Core অ্যাপ্লিকেশনে Google Authentication কনফিগার করা

  1. NuGet প্যাকেজ ইনস্টল করুন:
    • Microsoft.AspNetCore.Authentication.Google
  2. Startup.cs ফাইলে Google Authentication কনফিগার করুন:
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication()
            .AddGoogle(options =>
            {
                options.ClientId = "your-client-id"; // আপনার Google Client ID
                options.ClientSecret = "your-client-secret"; // আপনার Google Client Secret
            });

        services.AddControllersWithViews();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseAuthentication(); // Authentication Middleware ব্যবহার করতে হবে
        app.UseAuthorization();
    }
}
  1. LoginController তৈরি করুন যেখানে ব্যবহারকারী গুগল দিয়ে লগইন করতে পারবে:
public class AccountController : Controller
{
    public IActionResult Login(string returnUrl = null)
    {
        return Challenge(new AuthenticationProperties { RedirectUri = returnUrl ?? "/" }, "Google");
    }

    [HttpPost]
    public async Task<IActionResult> Logout()
    {
        await HttpContext.SignOutAsync();
        return RedirectToAction(nameof(HomeController.Index), "Home");
    }
}
  1. Login View এ Google login বাটন যোগ করুন:
<a href="/Account/Login">Login with Google</a>

কনফিগারেশন সম্পন্ন হলে, ইউজার গুগল অ্যাকাউন্ট দিয়ে লগইন করতে পারবে।


২. Facebook Authentication ইন্টিগ্রেশন

Facebook Developer Console থেকে API Key এবং Secret তৈরি করুন

  1. Facebook Developer Console এ যান: https://developers.facebook.com/
  2. একটি নতুন App তৈরি করুন।
  3. Facebook Login পণ্য সক্রিয় করুন।
  4. App Dashboard থেকে App ID এবং App Secret কপি করুন।

ASP.Net Core অ্যাপ্লিকেশনে Facebook Authentication কনফিগার করুন

  1. NuGet প্যাকেজ ইনস্টল করুন:
    • Microsoft.AspNetCore.Authentication.Facebook
  2. Startup.cs ফাইলে Facebook Authentication কনফিগার করুন:
public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication()
        .AddFacebook(options =>
        {
            options.AppId = "your-app-id"; // আপনার Facebook App ID
            options.AppSecret = "your-app-secret"; // আপনার Facebook App Secret
        });

    services.AddControllersWithViews();
}
  1. LoginController এবং View তৈরির পর, ব্যবহারকারী Facebook দিয়ে লগইন করতে পারবেন।

৩. Twitter Authentication ইন্টিগ্রেশন

Twitter Developer Console থেকে API Key এবং Secret তৈরি করুন

  1. Twitter Developer Console এ যান: https://developer.twitter.com/
  2. একটি নতুন App তৈরি করুন।
  3. API Key এবং API Secret Key কপি করুন।

ASP.Net Core অ্যাপ্লিকেশনে Twitter Authentication কনফিগার করুন

  1. NuGet প্যাকেজ ইনস্টল করুন:
    • Microsoft.AspNetCore.Authentication.Twitter
  2. Startup.cs ফাইলে Twitter Authentication কনফিগার করুন:
public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication()
        .AddTwitter(options =>
        {
            options.ConsumerKey = "your-consumer-key"; // আপনার Twitter Consumer Key
            options.ConsumerSecret = "your-consumer-secret"; // আপনার Twitter Consumer Secret
        });

    services.AddControllersWithViews();
}
  1. LoginController এবং View তৈরির পর, ব্যবহারকারী Twitter দিয়ে লগইন করতে পারবেন।

৪. নোটস এবং নিরাপত্তা

  • Redirect URI অবশ্যই তৃতীয় পক্ষের সেবায় সঠিকভাবে কনফিগার করতে হবে (যেমন: /signin-google, /signin-facebook, /signin-twitter)।
  • Callback URL এর জন্য নির্দিষ্ট একটি URL প্রদান করুন যা লগইন সফল হলে ব্যবহারকারীকে রিডিরেক্ট করবে।
  • HTTPS ব্যবহার করতে ভুলবেন না, বিশেষ করে ইউজারের সুরক্ষিত তথ্য ট্রান্সমিট করার সময়।

সারাংশ

ASP.Net Core এ External Login (যেমন Google, Facebook, Twitter) ইন্টিগ্রেশন একটি সহজ প্রক্রিয়া, যা ইউজারদের তৃতীয় পক্ষের অ্যাকাউন্ট দিয়ে অ্যাপ্লিকেশনে লগইন করার সুবিধা দেয়। আপনি OAuth 2.0 প্রোটোকল ব্যবহার করে বিভিন্ন সেবা প্রদানকারীদের সঙ্গে অ্যাপ্লিকেশন ইন্টিগ্রেট করতে পারবেন, যা ইউজারের জন্য আরও নিরাপদ এবং সহজ লগইন প্রক্রিয়া নিশ্চিত করে।

Content added By

Token-based Authentication (JWT)

Token-based Authentication একটি আধুনিক নিরাপত্তা প্রক্রিয়া যা ব্যবহারকারীকে সার্ভারের সাথে নিরাপদভাবে যোগাযোগ করতে অনুমতি দেয়। JSON Web Token (JWT) হল একটি ওপেন স্ট্যান্ডার্ড যা দুটি পক্ষের মধ্যে নিরাপদ তথ্য বিনিময়ের জন্য ব্যবহৃত হয়। ASP.Net Core অ্যাপ্লিকেশনে JWT ব্যবহার করা হয় ব্যবহারকারীকে অথেন্টিকেট করার জন্য। এই পদ্ধতিতে, সার্ভার একটি টোকেন প্রদান করে, যা পরবর্তীতে ক্লায়েন্ট দ্বারা সাবমিট করা হয় এবং সার্ভার এই টোকেনের মাধ্যমে ব্যবহারকারীকে অথেন্টিকেট করে।

JWT কী?

JWT একটি কমপ্যাক্ট এবং স্বনির্ভর স্ট্যান্ডার্ড যা তিনটি অংশে বিভক্ত:

  1. Header: টোকেনের ধরণ এবং এলগরিদম উল্লেখ করে।
  2. Payload: ব্যবহারকারীর তথ্য বা ক্লেইম ধারণ করে। (যেমন, ব্যবহারকারীর আইডি, ভূমিকা ইত্যাদি)
  3. Signature: টোকেনটির স্বাক্ষর যা এটি নিরাপদ রাখে, যাতে কেউ এটিকে ম্যানিপুলেট করতে না পারে।

JWT এর গঠন:

Header.Payload.Signature

Token-based Authentication প্রক্রিয়া

  1. Login: ব্যবহারকারী যখন তার ক্রেডেনশিয়ালস (ইউজারনেম এবং পাসওয়ার্ড) দিয়ে লগইন করে, তখন সার্ভার একটি JWT তৈরি করে এবং ক্লায়েন্টকে পাঠায়।
  2. Store Token: ক্লায়েন্ট এই টোকেনটি স্টোর করে (সাধারণত ব্রাউজারের localStorage বা sessionStorage তে)।
  3. Send Token in Request: পরবর্তী রিকোয়েস্টে, ক্লায়েন্ট টোকেনটিকে HTTP হেডারে পাঠায়।
  4. Verify Token: সার্ভার রিসিভ করা JWT যাচাই করে এবং নির্দিষ্ট অ্যাক্সেস অনুমতি দেয়।

ASP.Net Core অ্যাপে JWT Authentication সেটআপ করা

১. NuGet প্যাকেজ ইনস্টল করা

JWT Authentication ব্যবহার করতে Microsoft.AspNetCore.Authentication.JwtBearer প্যাকেজটি ইনস্টল করতে হবে।

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

২. Startup.cs ফাইলে JWT Authentication কনফিগারেশন

ASP.Net Core অ্যাপ্লিকেশনে JWT Authentication কনফিগার করতে আপনাকে Startup.cs ফাইলে কিছু সেটিংস করতে হবে।

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // JWT Authentication কনফিগারেশন
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    options.RequireHttpsMetadata = false;  // HTTPS বাধ্যতামূলক নয়
                    options.SaveToken = true;              // টোকেন সেভ করা হবে
                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateIssuer = true,
                        ValidateAudience = true,
                        ValidateLifetime = true,
                        ValidateIssuerSigningKey = true,
                        ValidIssuer = "your-issuer",
                        ValidAudience = "your-audience",
                        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"))
                    };
                });

        services.AddControllers();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();

        // JWT Authentication Middleware ব্যবহার
        app.UseAuthentication();

        // Authorization Middleware ব্যবহার
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

এখানে:

  • TokenValidationParameters ব্যবহার করে আমরা JWT এর বিভিন্ন বৈশিষ্ট্য যাচাই করি, যেমন: Issuer, Audience, Lifetime, এবং Signing Key
  • IssuerSigningKey সেট করা হয়েছে SymmetricSecurityKey দিয়ে, যেখানে আমাদের সিক্রেট কী ব্যবহার করা হয়েছে। এই কী দিয়ে টোকেনের সিগনেচার ভেরিফাই করা হবে।

৩. JWT টোকেন তৈরি করা

অথেন্টিকেশন সফল হলে, আপনাকে JWT টোকেন তৈরি করতে হবে এবং তা ক্লায়েন্টকে পাঠাতে হবে। এটি করার জন্য একটি অ্যাকশন তৈরি করা হয় যা ক্রেডেনশিয়াল যাচাইয়ের পর একটি টোকেন রিটার্ন করবে।

public class AuthController : ControllerBase
{
    private readonly IConfiguration _configuration;

    public AuthController(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    [HttpPost("login")]
    public IActionResult Login([FromBody] LoginModel login)
    {
        if (login.Username == "admin" && login.Password == "password")
        {
            var claims = new[]
            {
                new Claim(JwtRegisteredClaimNames.Sub, login.Username),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
            };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:SecretKey"]));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(
                issuer: _configuration["Jwt:Issuer"],
                audience: _configuration["Jwt:Audience"],
                claims: claims,
                expires: DateTime.Now.AddHours(1),
                signingCredentials: creds
            );

            return Ok(new
            {
                token = new JwtSecurityTokenHandler().WriteToken(token)
            });
        }

        return Unauthorized();
    }
}

এখানে:

  • login.Username এবং login.Password যাচাই করার পর, JWT টোকেন তৈরি করা হচ্ছে।
  • JwtSecurityToken তৈরি করা হচ্ছে এবং সাইনিং ক্রিডেনশিয়ালস সেট করা হচ্ছে।
  • তারপর, JwtSecurityTokenHandler এর মাধ্যমে টোকেনটি স্ট্রিং হিসেবে ক্লায়েন্টে পাঠানো হচ্ছে।

৪. Token পাঠানো এবং যাচাই

প্রতিটি রিকোয়েস্টে, ক্লায়েন্ট JWT টোকেনটি Authorization Header এ পাঠায়।

GET /api/values
Authorization: Bearer <your-token-here>

ASP.Net Core এই টোকেনটি গ্রহণ করে এবং যাচাই করে, এবং যদি টোকেনটি বৈধ হয়, তবে রিকোয়েস্টটি প্রসেস করা হয়।


সারাংশ

  • JWT Authentication একটি নিরাপদ এবং সহজ পদ্ধতি যা ASP.Net Core অ্যাপ্লিকেশনে ব্যবহারকারীদের অথেন্টিকেট করতে সাহায্য করে।
  • এটি JSON Web Token (JWT) ব্যবহার করে ব্যবহারকারীদের পরিচয় যাচাই করে এবং পরবর্তী রিকোয়েস্টের জন্য টোকেন প্রদান করে।
  • Startup.cs ফাইলে JWT কনফিগারেশন, টোকেন তৈরি এবং সাইনিং ক্রিডেনশিয়ালস কনফিগার করে টোকেন প্রক্রিয়াটি সম্পন্ন হয়।
  • Authorization হেডারে Bearer token পাঠিয়ে নিরাপদভাবে API রিকোয়েস্ট করা যায়।

JWT Authentication আপনার অ্যাপ্লিকেশনকে আরও নিরাপদ এবং স্কেলেবল করে তোলে, কারণ এটি স্টেটলেস এবং সেশনের প্রয়োজন হয় না।

Content added By
Promotion